Oracle RAC 11G 11.2.0.4 OEL7.9 最佳实践
1 背景知识
本章介绍如何在 Oracle Linux 7.9 上安装 Oracle 11G RAC
集群。
2 操作系统准备
以下操作都需要在 rac1
节点和 rac2
节点执行。
2.1 DNS 解析设置
#rac1#root>
#rac2#root>
cat >> /etc/hosts << EOF
#127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
#::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
127.0.0.1 localhost
#public ip
192.168.10.216 rac1
192.168.10.217 rac2
#vip
192.168.10.214 rac1-vip
192.168.10.215 rac2-vip
#private ip
192.168.122.31 rac1-priv
192.168.122.32 rac2-priv
#scanip
192.168.10.213 scan-ip
EOF
2.2 执行操作系统优化
#rac1#root>
#rac2#root>
bash optimize_system_conf_oracle.sh
2.3 创建目录
#rac1#root>
#rac2#root>
mkdir -p /u01/app/grid/product/11.2.0/db_1
mkdir -p /u01/app/oracle/product/11.2.0/db_1
mkdir -p /u01/app/grid/
chown -R oracle:dba /u01/app/oracle
chown -R grid:dba /u01/app/grid
chown grid:dba /u01/app/
chmod -R 775 /u01/app/oracle
chmod -R 775 /u01/app/grid
2.4 安装依赖包
其他Linux 操作系统。
#rac1#root>
#rac2#root>
yum install -y binutils elfutils-libelf elfutils-libelf-devel glibc \
glibc-common glibc-devel gcc gcc-c++ libaio libgcc libstdc++ libstdc++-devel \
make sysstat unixODBC-devel libaio-devel lrzsz compat-libstdc libcap.so.1 \
compat-libcap1 compat-libstdc++* lrzsz oracleasm* libXext* unzip \
gcc elfutils-libelf-devel gcc-c++
Oracle Linux 操作系统。
#rac1#root>
#rac2#root>
yum install -y oracle-rdbms-server-11gR2-preinstall.x86_64
yum install unzip gcc elfutils-libelf-devel gcc-c++ chrony -y
安装oracleasm
工具包。
#rac1#root>
#rac2#root>
yum install oracleasm* -y
2.5 设置Oracle环境变量
请参考 11G 环境变量。
2.5.1 rac1
#rac1#root>
su - oracle
cat >> ~/.bash_profile << EOF
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=\$ORACLE_BASE/product/11.2.0/db_1
export ORACLE_SID=citdb1
export ORACLE_UNQNAME=citdb1
export PATH=\$ORACLE_HOME/bin:\$PATH
export LANG=C
export LD_LIBRARY_PATH=\$ORACLE_HOME/lib:
export DISPLAY=192.168.10.130:0.0
export CVUQDISK_GRP=dba
EOF
2.5.2 rac2
#rac2#root>
su - oracle
cat >> ~/.bash_profile << EOF
export ORACLE_BASE=/u01/app/oracle
export ORACLE_HOME=\$ORACLE_BASE/product/11.2.0/db_1
export ORACLE_SID=citdb2
export ORACLE_UNQNAME=citdb2
export PATH=\$ORACLE_HOME/bin:\$PATH
export LD_LIBRARY_PATH=\$ORACLE_HOME/lib:
export DISPLAY=192.168.10.130:0.0
export CVUQDISK_GRP=dba
export LANG=C
EOF
2.6 设置GRID 环境变量
2.6.1 rac1
#rac1#root>
su - grid
cat >> ~/.bash_profile << EOF
export ORACLE_BASE=/u01/app/grid/base
export ORACLE_HOME=/u01/app/grid/product/11.2.0/db_1
export ORACLE_SID=+ASM1
export PATH=\$ORACLE_HOME/bin:\$PATH
export LD_LIBRARY_PATH=\$ORACLE_HOME/lib:
export DISPLAY=192.168.10.130:0.0
export CVUQDISK_GRP=dba
export LANG=C
EOF
2.6.2 rac2
#rac2#root>
su - grid
cat >> ~/.bash_profile << EOF
export ORACLE_BASE=/u01/app/grid/base
export ORACLE_HOME=/u01/app/grid/product/11.2.0/db_1
export ORACLE_SID=+ASM2
export PATH=\$ORACLE_HOME/bin:\$PATH
export LD_LIBRARY_PATH=\$ORACLE_HOME/lib:
export DISPLAY=192.168.10.130:0.0
export CVUQDISK_GRP=dba
export LANG=C
EOF
2.7 ROOT 的环境变量
#rac1#root>
#rac2#root>
cat >> ~/.bash_profile << EOF
export PATH=/u01/app/grid/product/11.2.0/db_1/bin:\$PATH
export LANG=C
EOF
2.8 准备共享磁盘
2.8.1 oracleasm 初始化
#rac1#root>
#rac2#root>
oracleasm init
oracleasm configure -i
grid
dba
y
y
2.8.2 磁盘分区
#rac1#root>
for i in {b..m};
do fdisk /dev/sd$i << EOF
n
p
w
EOF
done
2.8.3 创建ASM 磁盘
2.8.3.1 创建OCR 磁盘
#rac1#root>
count=1;
for i in {b..d};
do oracleasm createdisk OCR$count /dev/sd$i'1';
let count+=1;
done
2.8.3.2 创建DATA 磁盘
#rac1#root>
count=1;
for i in {e..g};
do oracleasm createdisk DATA$count /dev/sd$i'1';
let count+=1;
done
2.8.3.3 创建快速恢复目录
#rac1#root>
count=1;
for i in {h..j};
do oracleasm createdisk FRA$count /dev/sd$i'1';
let count+=1;
done
2.8.3.4 创建MGAT 目录
#rac1#root>
count=1;
for i in {k..m};
do oracleasm createdisk MGT$count /dev/sd$i'1';
let count+=1;
done
2.8.4 检查磁盘是否创建成功
#rac1#root>
oracleasm listdisks
//屏幕输出:
DATA1
DATA2
DATA3
FRA1
FRA2
FRA3
MGT1
MGT2
MGT3
OCR1
OCR2
OCR3
2.9 磁盘信息同步
#rac2#root>
oracleasm scandisks
Reloading disk partitions: done
Cleaning any stale ASM disks...
Scanning system for ASM disks...
Instantiating disk "OCR3"
Instantiating disk "MGT1"
Instantiating disk "FRA2"
Instantiating disk "FRA3"
Instantiating disk "OCR2"
Instantiating disk "DATA3"
Instantiating disk "FRA1"
Instantiating disk "DATA2"
Instantiating disk "DATA1"
Instantiating disk "OCR1"
Instantiating disk "MGT3"
Instantiating disk "MGT2"
2.10 调整/dev/shm
- 增大 tmpfs 文件系统大小。
#rac1#root>
#rac2#root>
cat >> /etc/fstab << EOF
tmpfs /dev/shm tmpfs defaults,size=8192M 0 0
EOF
- 重新挂载 tmpfs 文件系统。
#rac1#root>
#rac2#root>
mount -o remount /dev/shm
3 NTP 服务
3.1 rac1 节点作为 NTP 服务端
- 编辑
/etc/chrony.conf
配置文件 。
#rac1#root>
vi /etc/chrony.conf
- 修改第
3
行 和第23
行。
server 192.168.10.211 prefer
allow 192.168.10.0/24
- 重启NTP服务。
#rac1#root>
systemctl restart chronyd
systemctl status chronyd
systemctl enable chronyd
3.2 rac2 节点作为 NTP 客户端
- 编辑
/etc/chrony.conf
配置文件。
#rac2#root>
vi /etc/chrony.conf
- 修改第
3
行和。
server 192.168.10.216 iburst
- 重启服务
#rac2#root>
systemctl restart chronyd
systemctl status chronyd
systemctl enable chronyd
3.3 验证时间同步
#rac2#root>
chronyc sources
chronyc sourcestats
210 Number of sources = 1
MS Name/IP address Stratum Poll Reach LastRx Last sample
===============================================================================
^? rac1 0 6 0 - +0ns[ +0ns] +/- 0ns
Name/IP Address NP NR Span Frequency Freq Skew Offset Std Dev
==============================================================================
rac1 0 0 0 +0.000 2000.000 +0ns 4000ms
只要确定 Offset
为 0ns
即可。说明两台服务器时间一致。
4 准备安装介质
4.1 创建目录
#rac1#root>
cd /app
mkdir setup
mkdir db
mkdir grid
chown -R grid:dba grid/
chown -R oracle:dba db/
4.2 上传解压软件
上传GI+DB软件到 setup
目录,并解压到本地目录。
p13390677_112040_Linux-x86-64_1of7.zip
p13390677_112040_Linux-x86-64_2of7.zip
p13390677_112040_Linux-x86-64_3of7.zip
p18370031_112040_Linux-x86-64.zip
#rac1#root>
chown oracle:dba /app/setup
chmod 775 /app/setup
su - oracle
#rac1#oracle>
cd /app/setup
unzip -q p13390677_112040_Linux-x86-64_1of7.zip
unzip -q p13390677_112040_Linux-x86-64_2of7.zip
su - grid
#rac1#grid>
cd /app/setup
unzip -q p13390677_112040_Linux-x86-64_3of7.zip
unzip -q p18370031_112040_Linux-x86-64.zip
到此为止时,请打快照 DB_INSTALL_ENV 。
5 启动GI安装
在OEL7.0下安装,将会报以下错误:**
…
pa peer cert TP
profile reader pa cert TP
profile reader peer cert TP
peer user cert
pa user cert
Adding daemon to inittab
CRS-4124: Oracle High Availability Services startup failed.
CRS-4000: Command Start failed, or completed with errors.
ohasd failed to start: Inappropriate ioctl for device
ohasd failed to start at /u01/app/grid/product/11.2.0/grid/crs/install/rootcrs.pl line 443.
su - grid
#grid>
cd /app/setup/grid
export DISPLAY=192.168.10.130:0.0
./runInstaller
5.1 GI软件安装参数
参数 | 值 |
---|---|
skip software updates | |
安装选项 | Install and configure oracele grid for a cluster |
安装类型 | advanced installation. |
cluster name | ASM |
scan name | scan-ip |
csan port | 1521 |
新加节点 | rac2,rac2-vip,grid ,并点击 setup . |
勾选 | reuseprivate and publuic keys . |
ASM 磁盘组 | OCR |
AU size | 1MB |
Redundancy | External |
SYS\ASMSNMP 密码 | grid |
OSASM | asmdba |
OSDBA | asmdba |
OSOPER | asmdba |
Oracle Base | /u01/app/grid/base |
安装目录 | /u01/app/grid/product/11.2.0/db_1 |
Inventory | /u01/app/grid/oraInventory |
- 磁盘路径为:> /dev/oracleasm/disks
- 注意
·Inventory
目录要正确,否则无法打补丁。
5.2 GI 补丁安装
在执行 root.sh
之前,先安装补丁 Patch 18370031
,方法为,使用 grid
用户执行以下命令即可之后,再执行 root.sh
即可。
在执行root.sh之前,先安装补丁Patch 18370031,方法为,使用grid用户执行以下命令即可之后,再执行root.sh即可。
两个节点都需要上传补丁文件,并按照节点顺序打补丁,不可同时执行。
#rac1#grid>
#rac2#grid>
/u01/app/grid/product/11.2.0/db_1/OPatch/opatch napply -oh /u01/app/grid/product/11.2.0/db_1/ -local /app/setup/18370031/
5.3 运行root 脚本
两个节点都需要执行,不可同时执行。
#rac1#root>
#rac2#root>
/u01/app/grid/oraInventory/orainstRoot.sh
/u01/app/grid/product/11.2.0/db_1/root.sh
6 创建ASM 磁盘组
启动 asmca
创建 ASM
磁盘组
su - grid
#rac1#grid>
export DISPLAY=192.168.10.130:0.0
asmca
选项 | 参数 |
---|---|
磁盘组名称 | DATA(DATA1,DATA2,DATA3) |
磁盘组冗余 | External |
磁盘组名称 | FRA(FRA1,FRA2,FRA3) |
磁盘组名称 | MGT(MGT1,MGT2,MGT3) |
7 启动DB安装
su - oracle
#rac1#oracle>
cd /app/setup/database
export DISPLAY=192.168.10.130:0.0
./runInstaller
7.1 DB 软件安装参数
参数 | 值 |
---|---|
support eamil | 不勾选 |
skip software updates | |
install options | install database software only |
勾选 | resuse private and public keys |
OS Password | oracle |
language | 添加simplified chinese |
数据库版本 | 企业版 |
oracle base | /u01/app/oracle |
软件安装目录 | /u01/app/oracle/product/11.2.0/db_1 |
OSDBA | dba |
OSOPER | dba |
链接和编译文件的时候会出现一个bug 安装时有出现一个错误:
Error in invoking target 'agent nmhs' of makefile '/u01/app/oracle/product/11.2.0/db_1/sysman/lib/ins_emagent.mk'
据说是Oracle的一个Bug,在新版系统下可能会表现出来.
解决方案: 保留安装过程,另外开启一个终端窗口,将ins_emagent.mk文件中的$(MK_EMAGENT_NMECTL)
更改为$(MK_EMAGENT_NMECTL) -lnnz11
,然后在安装过程中点击Retry即可。
7.2 Oracle数据库安装参数
su - oracle
#oracle>
export DISPLAY=192.168.10.130:0.0
dbca
选项 | 参数 |
---|---|
数据库类型 | 选择GTP |
Global Database Name | citdb |
EM | 不勾选 |
自动维护工具 | 开启 |
system 和sys 密码 | oracle |
数据文件存储 | ASM |
SFRA (快速恢复区) | 4182 (默认) |
sample schemas | 勾选 |
SGA and PGA | 选择TYpical 并指定 70%。 |
Process | 150 |
字符集 | AL16UTF16 |
Connection mode | 独占模式 |
Oracle-Manage | +DATA |
快速恢复区 | +FRA |
7.3 导入测试数据
导入 [[000-inbox/Oracle/inito.sql]] 脚本,生成 oa
模式。
7.4 密码过期处理
7.4.1 查看用户 Profile
#oracle>
sqlplus / as sysdba
SELECT username,PROFILE FROM dba_users WHERE username IN ('SYSTEM','OA');
7.4.2 更改 profile
策略
设置 profile
策略
#sys>
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED;
更多内容请参考 Oracle 密码过期策略
8 小结 & FAQ
8.1 操作系统不兼容
- 报错信息。
[WARNING] [INS-08101] Unexpected error while executing the action at state: 'supportedOSCheck'
CAUSE: No additional information available.
ACTION: Contact Oracle Support Services or refer to the software manual.
- 设置操作系统兼容模式
#oracle> or #grid>
export CV_ASSUME_DISTID=RHEL7.6
export CV_ASSUME_DISTID=RHEL7.6
8.2 互信问题
在安装过程中会报scp 无法连接的问题。报错信息如下。
报错信息:passwordless [ssh](https://so.csdn.net/so/search?q=ssh&spm=1001.2101.3001.7020) connectivity is not setup from the local node node1 to the following nodes node2
解决方案
1)Rename the original scp.
mv /usr/bin/scp /usr/bin/scp.orig
2)Create a new file .
vi /usr/bin/scp
3)Add the below line to the new created file .
/usr/bin/scp.orig -T $*
4)Change the file permission.
chmod 555 /usr/bin/scp
After installation:
mv /usr/bin/scp.orig /usr/bin/scp
8.3 删除磁盘组
count=1;
for i in {b..m};
do oracleasm deletedisk FRA$count;
let count+=1;
done
count=1;
for i in {b..m};
do oracleasm deletedisk DATA$count;
let count+=1;
done
count=1;
for i in {b..m};
do oracleasm deletedisk OCR$count;
let count+=1;
done
for i in {b..m};
do oracleasm deletedisk MGT$count;
let count+=1;
done
8.4 删除磁盘分区
for i in {b..m};
do fdisk /dev/sd$i << eof
d
w
eof
done